<?php
/**
 * Класс Team Базовый класс команды
 *  @author Mike
 */

class Team extends ActiveRecord {
	protected $tableName = 'team';
	protected $pkName = 'ID_team';
	protected $arrSettings = array('created_at' => true, 'author' => true);
	protected $fieldsRules = array (
								'team_name' => array('min' => 2, 'max' => 512),
								'description' => array('max' => 5020)
								);
	
	protected function beforeValidation() {
		if(empty($this->tableFields['ID_city'])) $this->arrErrors[] = 'Не передан идентификатор города';
		elseif(!City::getCityNameById($this->tableFields['ID_city'])) $this->arrErrors[] = 'Передан неверный идентификатор города';
		if(isset($this->tableFields['city_name'])) unset($this->tableFields['city_name']);
	}
	
	public function beforeValidationOnCreate() {
	}
	
	public function beforeValidationOnUpdate() {
		if(!isset($this->tableFields['entry_restrict'])) $this->tableFields['entry_restrict'] = 0;
		else $this->tableFields['entry_restrict'] = 1;
	}
	
	protected function afterCreate() {
		$objUserTeam = new TeamUser(array('ID_user' => $this->getField('ID_user'),'ID_team' => $this->id, 'is_admin' => 2));
		$objUserTeam->save();
	}
	
	/**
	 * Функция получает статусы(1 элемент массива - администраторский, 2 элемент массива - тип участника) для пары команда-юзер
	 * 
	 * @param int $userId - id пользователя
	 * @return array
	 */
	public function getTeamStatuses($userId) {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `team_user`.`ID_user_team`, `team_user`.`status`, `team_user`.`is_admin` FROM `team_user` WHERE `team_user`.`ID_user`='" . $userId . "' AND `team_user`.`ID_team`='" . $this->id . "'";
		return $objDB->selectOneRow($stmt);
	}
	
	/**
	 * Функция проверяет, является ли текущий пользователь админисратором  текущей команды
	 *
	 * @return array
	 */
	public function isTeamAdmin() {
		$userId = User_Seance::getId();
		if(!$userId) return false;
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `team_user`.`is_admin` FROM `team_user` WHERE `team_user`.`ID_user`='" . $userId . "'  AND `team_user`.`ID_team`='" . $this->id . "' AND `team_user`.`is_admin` != 0";
		return $objDB->selectOneRow($stmt);
	}
	
	/**
	 * Функция получает массив участников текущей команды(исключаем ststus=0, т.к. это админи-создатель не состоящие в команде)
	 *
	 * @return array 
	 */
	public function getTeamPeople() {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `user`.`first_name`,`user`.`last_name`,`user`.`ID_user`, `user`.`avatar_filename`, `team_user`.`is_admin`,`team_user`.`status`, `city`.`city_name` FROM `team_user` INNER JOIN `user` USING(`ID_user`) LEFT JOIN `city` ON `city`.`ID_city`=`user`.`ID_city` WHERE `team_user`.`ID_team`='" . $this->id . "' AND `team_user`.`status` != 0";
		return $objDB->select($stmt);
	}
	
	/**
	 * Функция получает массив заявок на вступление в текущую команду
	 *
	 * @return array 
	 */
	public function getRequestsInTeam() {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `user`.`ID_user`,`user`.`first_name`,`user`.`last_name`,`user`.`avatar_filename`,`request_to_team`.`status` FROM `request_to_team` INNER JOIN `user` USING(`ID_user`) WHERE `request_to_team`.`ID_team`='" . $this->id . "'";
		return $objDB->select($stmt);
	}
	
	/**
	 *  Функция устанавливает пользователю статус администратора команды
	 * 
	 * @param int $userId - id пользователя
	 * @return boolean
	 */
	public function makeAdmin($userId) {
		$objDB = Service_Database::instanse();
		$stmt = "UPDATE `team_user` SET `team_user`.`is_admin`=1 WHERE `team_user`.`ID_team`='" . $this->id . "' AND  `team_user`.`ID_user`='" . $userId . "'";
		return $objDB->query($stmt);
	}
	
	/**
	 *  Функция отбирает у пользователю статус администратора команды
	 *
	 * @param int $userId - id пользователя
	 * @return boolean
	 */
	public function killAdmin($userId) {
		$objDB = Service_Database::instanse();
		$stmt = "UPDATE `team_user` SET `team_user`.`is_admin`=0 WHERE `team_user`.`ID_team`='" . $this->id . "' AND  `team_user`.`ID_user`='" . $userId . "'";
		return $objDB->query($stmt);
	}
	
	/**
	 * Функция получает список админов команды
	 *
	 * @return array
	 */
	public function getTeamAdmins() {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `user`.`ID_user`,`user`.`first_name`,`user`.`last_name`, `user`.`avatar_filename`,`team_user`.`is_admin`,`city`.`city_name` FROM `team_user` INNER JOIN `user` USING(`ID_user`) LEFT JOIN `city` ON `city`.`ID_city`=`user`.`ID_city` WHERE `team_user`.`is_admin`!=0 AND `team_user`.`ID_team`='" . $this->id . "'";
		return $objDB->select($stmt);
	}
	
	/**
	 * Метод сохраняет параметры поиска команды(Реадктирование, вкладка "Поиск")
	 *
	 */
	public function EditSearchParameters() {
		$objDB = Service_Database::instanse();
		$teamArr = $_POST['Team'];
	
		if(!isset($teamArr['line']) || (isset($teamArr['line']) && !isset($teamArr['line1']) && !isset($teamArr['line2']) && !isset($teamArr['line3']) && !isset($teamArr['line4']) )) {
			// Если не отмечен чекбокс доступности поиска или отмечен, но не выбрано ни одного амплуа, то удаляем все записи, которые могут быть
			if($this->updateFields(array('search_status' => 0))) {
				$stmt = "DELETE FROM `team_search` WHERE `ID_team`='" . $this->id . "'";
				$objDB->query($stmt);
			}
		}
		else {
			unset($teamArr['line']);
				
			// Удаляем все старые записи
			$stmt = "DELETE FROM `team_search` WHERE `ID_team`='" . $this->id . "'";
			$objDB->query($stmt);
				
			$i = 0;
			$stmt = "INSERT INTO `team_search`(`ID_team`,`line`) VALUES";
	
			foreach($teamArr as $line => $checkflag) { // По идее здесь должны быть только чекбоксы, если есть ещё что-то - ломают
				switch($line) {
					case 'line1' :
						$stmt .= "('" . $this->id . "', 1)";
						$i++;
						break;
					case 'line2' :
						$stmt .= "('" . $this->id . "', 2)";
						$i++;
						break;
					case 'line3' :
						$stmt .= "('" . $this->id . "', 3)";
						$i++;
						break;
					case 'line4' :
						$stmt .= "('" . $this->id . "', 4)";
						$i++;
						break;
				}
				$stmt .= ($i == count($teamArr)) ? ';' : ',';
			}
			if($objDB->query($stmt)) $this->updateFields(array('search_status' => 1));
		}
	}
	
	/**
	 * Метод получает параметры поиска для текущей команды(игроков с каким амплуа она ищет)
	 *
	 */
	public function getSearchParameters() {
		$objDB = Service_Database::instanse();
		$stmt = "SELECT `team_search`.`line`
				FROM `team_search`
				WHERE `team_search`.`ID_team`='" . $this->id . "'";
		return $objDB->selectOneColumn($stmt);
	}
}
?>